home *** CD-ROM | disk | FTP | other *** search
-
- *****Listing 2*****
-
-
- #include <stdio.h>
- #include <stdlib.h>
-
- void prochar(void *parg);
- void proint(void *parg);
- void prolong(void *parg);
- void prodouble(void *parg);
- void pronone(void *parg);
-
- /* structure type flag values */
-
- #define TYPENONE 0 /* Not pointing at an object */
- #define TYPECHAR 1 /* char */
- #define TYPEINT 2 /* int */
- #define TYPELONG 3 /* long */
- #define TYPEDOUBLE 4 /* double */
-
- struct node {
- struct node *pfwd; /* forward ptr */
- struct node *pbwd; /* backward ptr */
- void *pobject; /* ptr to object */
- unsigned int objtype; /* indicate object type */
- };
-
- main()
- {
- char c = 'A';
- int i = 10;
- long int l = 123456;
- double d = 123.45;
- static void (*funtable[])(void *parg) = {
- pronone,
- prochar,
- proint,
- prolong,
- prodouble
- };
- struct node *pnode;
-
- pnode = malloc(sizeof(struct node));
-
- /* let's point to a double */
-
- pnode->pobject = &d;
- pnode->objtype = TYPEDOUBLE;
- pnode->pfwd = NULL;
- pnode->pbwd = NULL;
-
- /* at a later point, let's process the object to which we point */
-
- (*funtable[pnode->objtype])(pnode->pobject);
- }
-
- /* processing functions */
-
- void prochar(void *parg)
- {
- printf("char: %c\n", *(char *)parg);
- }
-
- void proint(void *parg)
- {
- printf("int: %d\n", *(int *)parg);
- }
-
- void prolong(void *parg)
- {
- printf("long: %ld\n", *(long *)parg);
- }
-
- void prodouble(void *parg)
- {
- printf("double: %f\n", *(double *)parg);
- }
-
- void pronone(void *parg)
- {
- printf("none:\n");
- }
-
-